#ifndef _GNSS_H_
#define _GNSS_H_

#include "include.h"

#include <api_gps.h>
#include "gps.h"
#include "gps_parse.h"
#include "math.h"

typedef enum _FixQuality {
    FixQ_NoNone     = 0, // Fix not available
    FixQ_NoFix      = 1, // Fix not available
    FixQ_2DFix      = 2, // 2D 定位
    FixQ_3DFix      = 3, // 3D 定位
    FixQ_DGPSFix    = 4, // 查分模式定位
    FixQ_PPSFix     = 5, // 军用模式定位
} FixQuality_t;

typedef struct _GnssNema {
    uint32_t genTime;      // UTC RMC
    int32_t  Latitude;     // 纬度 正北 负南 以度为单位的纬度值乘以 10 的 6 次方，精确到百万分之一度 RMC
    int32_t  Longitude;    // 经度 正东 负西 以度为单位的经度值乘以 10 的 6 次方，精确到百万分之一度 RMC
    int16_t  Altitude;     // 海拔高度 m RMC
    int16_t  Direction;    // 方向 0~359，正北为0，顺时针
    int16_t  Speed;        // 速度 0.1km/h
    uint8_t  IsVaild;      // 工作状态 1: 有效 0：无效 RMC
    uint8_t  FixQuality;   // 定位质量 FixQuality_t
    uint8_t  WorkMode;     // 工作模式 bit0: GPS bit1:BDS 定位组合 
    uint8_t  GnssTracked;  // GPS 参与定位卫星总数量 来自GGA
    uint8_t  GpsTracked;   // GPS 参与定位卫星数量   来自GSA GSV是可见数量
    uint8_t  BdsTracked;   // BDS 参与定位卫星数量   来自GSA GSV是可见数量
} GnssNmea_t;

// GPS模块上下文，用于记录GPS状态和数据
typedef struct _GnssContext_t {
    uint8_t         IsLocated;  // GPS是否已定位 1：定位 0：非定位
    GnssNmea_t      NmeaInfo;  // 当前GPS简要数据
} GnssContext_t;

GnssNmea_t* gnss_GetInfo(void);

void Gnss_TaskEntry(void *pData);

#endif /* end of _GNSS_H_ */
